<?php

// 生成一个用户编号

use think\facade\Cache;

function generateUserNumber()
{
    $prefix = 'M';
    $random = strtoupper(substr(md5(uniqid()), 0, 8));
    $number = $prefix . $random;
    return $number;
}


// 生成订单号
function generateOrderNumber($prefix = 'T')
{
    // 日期前缀 (月日) => 4 位
    $date = date('md');
    // Redis key（每天一个），防止跨天冲突
    $key = 'order_seq:' . date('Ymd');
    // Redis 自增（原子操作，保证唯一）
    $seq = Cache::store('redis')->inc($key);
    // 设置过期时间（2天），确保第二天自动重置
    if ($seq === 1) {
        Cache::store('redis')->expire($key, 2 * 24 * 60 * 60);
    }
    // 补齐 6 位序列号
    $seqPart = str_pad($seq, 6, '0', STR_PAD_LEFT);
    return $prefix . $date . $seqPart; // 10 位订单号
}


// 生成核销码

function generateVerifyCode($length = 8)
{
    $chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789'; // 去掉易混淆的 0O1I
    $code = '';
    for ($i = 0; $i < $length; $i++) {
        $code .= $chars[random_int(0, strlen($chars) - 1)];
    }
    return $code;
}


function getSkuVariant($skuVariants, $productVariants)
{
    $variantText = '';
    $variantDetails = [];
    foreach ($skuVariants as $index => $skuVariantIndex) {
        if (isset($productVariants[$index])) {
            $productVariant = $productVariants[$index];
            $variantName = $productVariant['name']['zh_cn'] ?? $productVariant['name']['en'] ?? '';

            if (isset($productVariant['values'][$skuVariantIndex])) {
                $variantValue = $productVariant['values'][$skuVariantIndex];
                $valueName = $variantValue['name']['zh_cn'] ?? $variantValue['name']['en'] ?? '';
                $valueImage = $variantValue['image'] ?? '';

                $variantDetails[] = [
                    'name' => $variantName,
                    'value' => $valueName,
                    'image' => $valueImage
                ];

                if ($variantText) {
                    $variantText .= ', ';
                }
                $variantText .= $variantName . ':' . $valueName;
            }
        }
    }
    return [$variantText,$variantDetails];
}
